/**
 * 
 */
package gui;

import general.Page;
import general.VariablesGlobales;

import io.ExporterPagesToHTML;
import io.ImporterFichierHTML;

import java.io.File;
import java.io.IOException;
import java.util.logging.Filter;

import javax.swing.JFileChooser;
import javax.swing.plaf.metal.MetalIconFactory.FolderIcon16;

import nettoyage.Nettoyage;

import classificationEtSelection.ClassificationEtSelection;
import classificationEtSelection.Cluster;

import criteres.Criteres;

/**
 * Classe executant les actions liées à l'interface
 * @author remi
 *@version 1.0
 */
public class Controle {

	/**
	 * action effectuée lors du clique sur le bouton selection du repertoire source
	 */
	public static void actionSelectionRepertoireSource(){
		// TODO actionSelectionRepertoireSource a remplir

		System.out.println("debut de la selection du repertoire source des fichiers html");
		TextArea.ecrireMsg("debut de la selection du repertoire source des fichiers html");	

		//creation d'un JFIleChooser
		final JFileChooser fc = new JFileChooser();
		fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
		fc.setCurrentDirectory(new File("inputHTML"));
		File file=new File("inputHTML");

		int returnVal = fc.showOpenDialog(Application.getInstance().getFrame());
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			file = fc.getSelectedFile();
			// FIXME actionSelectionRepertoireSource : stoquer le nom du repertoire récupéreé
			TextArea.ecrireMsg("voici le nom du fichier: \n "+file.getName());
		}
		VariablesGlobales.fichierEntreeClassification = file;

	}

	/**
	 * action effectuée lors du clique sur le bouton selection du repertoire de la classification
	 */
	public static void actionSelectionRepertoireDestinationClassification(){
		// TODO actionSelectionRepertoireSource a remplir

		TextArea.ecrireMsg("debut de la selection du repertoire de destiantion des fichiers classifié");

		//creation d'un JFIleChooser
		final JFileChooser fc = new JFileChooser();
		fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
		fc.setCurrentDirectory(new File("outputHTML"));
		File file=new File("outputHTML");

		int returnVal = fc.showOpenDialog(Application.getInstance().getFrame());
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			file = fc.getSelectedFile();
			

			VariablesGlobales.fichierSortieClassification = file;
			
			// FIXME actionSelectionRepertoireDestinationClassification : stoquer le nom du repertoire récupéreé pour sortie classification

			try {
				TextArea.ecrireMsg("Sortie de la classification, entree du nettoyage : \n "+file.getCanonicalPath());
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	


	}

	/**
	 * action effectuée lors du clique sur le bouton selection du repertoire nettoyage
	 */
	public static void actionSelectionRepertoireDestinationNettoyage(){
		
		TextArea.ecrireMsg("debut de la selection du repertoire de destiantion des fichiers nettoyés");
		
		//creation d'un JFIleChooser
		final JFileChooser fc = new JFileChooser();
		fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
		fc.setCurrentDirectory(new File("outputHTML"));
		File file=new File("");

		int returnVal = fc.showOpenDialog(Application.getInstance().getFrame());
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			file = fc.getSelectedFile();

			TextArea.ecrireMsg("voici le nom du fichier: \n "+file.getName());
		}

		VariablesGlobales.fichierSortieNettoyage  =file;
		
		//TextArea.ecrireMsg("note: en test, les repertoires sont préchoisis");
		//ImporterFichierHTML.creerPagesAPartirDunRepertoire(file, VariablesGlobales.getPages());
		//ImporterFichierHTML.creerPagesAPartirDunRepertoire(new File("inputHTML"), VariablesGlobales.getPages());

	}

	
	/**
	 * permet d'ouvrir une fenetre et d'enregistrer les parametres courants
	 */
	public static void actionSelectionSauvegarde(){
		// TO DO actionSelectionSauvegarde
		TextArea.ecrireMsg("Enregistrer les parametres courants");
		
		final JFileChooser fc = new JFileChooser();
		int val = JFileChooser.SAVE_DIALOG;
		File file=new File("");
		
		int returnVal = fc.showOpenDialog(Application.getInstance().getFrame());
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			file = fc.getSelectedFile();
			// FIXME actionSelectionRepertoireSource : stoquer le nom du repertoire récupéreé
			TextArea.ecrireMsg("voici le nom du fichier: \n "+file.getName());
		}
	}

	/**
	 * action effectuée lors du clique sur le bouton lancer extraction
	 */
	public static void actionLancerExtraction(){
		// TODO actionSelectionRepertoireSource a remplir

		TextArea.ecrireMsg("lancement de l'extraction");

		Criteres criteres = new Criteres();
		Criteres.lancerCalculCritere(VariablesGlobales.getPages());

		TextArea.ecrireMsg("fin de l'extraction");
	}

	
	
	/**
	 * action effectuée lors du clique sur le bouton lancer classification
	 */
	public static void actionLancerClassification(){
		// TODO actionSelectionRepertoireSource a remplir

		System.out.println("lancement de la classification");
		TextArea.ecrireMsg("lancement de la classification");

		System.out.println("nombre de page dans le vecteur de page : "+VariablesGlobales.getPages().size());

//		for(Page page : VariablesGlobales.getPages() ){
//			System.out.println("voici le contenu de la page"+page);
//			System.out.println("voici le point " + page.getPoint());
//		}

		//		System.exit(1);

		ClassificationEtSelection cEtS = new ClassificationEtSelection();
		cEtS.lancerLaClassification(VariablesGlobales.getPages());

		TextArea.effacerPuisEcrireMsg("fin de la classification");
		
		
		int nombreDePages = 0;
		int nombreDeClusters = cEtS.getClusters().size();
		float pourcentage = 0;
		int somme = 0;
		for(int i = 0; i < nombreDeClusters; i++)
		{
			nombreDePages = nombreDePages + cEtS.getClusters().get(i).getPages().size();
			if (cEtS.getClusters().get(i).isUtile() == true)
			{
				somme = somme + cEtS.getClusters().get(i).getPages().size();
			}
		}
		pourcentage = (float) somme / (float) nombreDePages;
		TextArea.ecrireMsg("nombre de pages: " + nombreDePages);
		TextArea.ecrireMsg("nombre de clusters: " + nombreDeClusters);
		TextArea.ecrireMsg("pourcentage de pages selectionnees: " + (int) (pourcentage * 100));
	
	}
	
	/**
	 * action effectuée lors du clique sur le bouton lancer copie
	 */
	public static void actionLancerCopieClusters(){


		try {
			TextArea.ecrireMsg("lancement de la copie des clusters sur le disque dans le repertoire : "+VariablesGlobales.fichierSortieClassification.getCanonicalPath());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//on lance la copie
		ClassificationEtSelection.lancerLaCopie(ClassificationEtSelection.getClusters());
		
		TextArea.ecrireMsg("fin de la copie des clusters");
	}

	/**
	 * action effectuée lors du clique sur le bouton lancer nettoyage
	 */
	public static void actionLancerNettoyage(){
		System.out.println("Lancement du nettoyage");
		TextArea.ecrireMsg("Lancement du nettoyage");
		Nettoyage.lancerNettoyage();
		System.out.println("Fin du nettoyage");
		TextArea.ecrireMsg("Fin du nettoyage");
	}



}
